/**
 * 判断文件是否为图片
 * @param filename 文件名或路径
 * @returns boolean
 */
export function isImageFile(filename: string): boolean {
  // 常见图片扩展名：jpg, jpeg, png, gif, bmp, webp, svg, tiff
  const regex = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff?)$/i;
  return regex.test(filename);
}

/**
 * 获取文件扩展名
 * @param filename 文件名或路径
 * @returns 扩展名（不含.），如果没有扩展名则返回空字符串
 */
export function getFileExtension(filename: string): string {
  // 匹配最后一个"."后面的部分（忽略 ?、# 后的参数）
  const regex = /\.([a-zA-Z0-9]+)(?:\?.*|#.*)?$/;
  const match = filename.match(regex);
  return match ? match[1].toLowerCase() : "";
}

/**
 * 下载文件并保存到本地
 * @param url 文件下载地址
 * @returns Promise<string> 返回本地临时路径
 */
export function downloadFile(url: string): Promise<string> {
  return new Promise((resolve, reject) => {
    uni.downloadFile({
      url,
      success: (res) => {
        if (res.statusCode === 200) {
          // 下载成功后保存
          uni.saveFile({
            tempFilePath: res.tempFilePath,
            success: (saveRes) => {
              resolve(saveRes.savedFilePath);
            },
            fail: (err) => reject(err),
          });
        } else {
          reject(new Error("下载失败，状态码：" + res.statusCode));
        }
      },
      fail: (err) => reject(err),
    });
  });
}

/**
 * 下载文件并直接打开（适合 PDF、DOC、XLS 等）
 * @param url 文件下载地址
 */
export function downloadAndOpenFile(url: string): void {
  uni.downloadFile({
    url,
    success: (res) => {
      if (res.statusCode === 200) {
        uni.openDocument({
          filePath: res.tempFilePath,
          success: () => {
            console.log("文件打开成功");
          },
          fail: (err) => {
            console.error("打开文件失败", err);
          },
        });
      }
    },
    fail: (err) => {
      console.error("下载失败", err);
    },
  });
}

export function getBlob (url: string) {
  return new Promise(resolve => {
    const XML = new XMLHttpRequest();
    XML.open('GET', url, true);
    XML.responseType = 'blob';
    XML.onload = () => {
      if (XML.status === 200) {
        resolve(XML.response);
      }
    };
    XML.send();
  });
}

//下载文件
export function saveAs(blob: any, filename: string) {
  const elelink = document.createElement("a");
  elelink.style.display = 'none';
  elelink.download = filename;
  elelink.href = window.URL.createObjectURL(blob);
  document.body.appendChild(elelink);
  elelink.click();
  document.body.removeChild(elelink);
}

// 下载文件
export function webDownloadFile(url: string, filename: string) {
  // 调用以上方法进行下载
  return new Promise((resolve, reject) => {
    getBlob(url).then(blob => {
      saveAs(blob, filename);
      resolve(filename)
    }).catch((e) => {
      reject(e)
    })
  })
}
